# 动态添加属性和方法示例
import types  # 需要导入types模块


# 定义基础类
class Student:
    pass


# 创建实例
s1 = Student()

# 一、动态添加属性
s1.name = "哪吒"  # 添加字符串属性
s1.age = 22  # 添加数字属性
s1.scores = [90, 85]  # 添加列表属性

print(f"姓名：{s1.name}, 年龄：{s1.age}, 成绩：{s1.scores}")
# 输出：姓名：哪吒, 年龄：22, 成绩：[90, 85]


# 二、动态添加方法
def study(self, subject):
    """定义一个学习方法"""
    print(f"{self.name} 正在学习 {subject}")


# 将函数绑定为实例方法
s1.study = types.MethodType(study, s1)

# 调用动态添加的方法
s1.study("Python")
# 输出：哪吒 正在学习 Python


# 三、动态添加无参方法
def greet(self):
    print(f"你好，我是{s1.name}")


s1.greet = types.MethodType(greet, s1)
s1.greet()
# 输出：你好，我是哪吒
